class suanFa {

    constructor() {

        console.log("开启算法");

    }

    init() {

        // this.reverseString("hello");
        let dayin = this.confirmEnding("Bastian", "n");
        console.log(dayin);

    }

    /**
     * 理清aplay 、call、 bind传参说明
     * 给一个方法就行传参 都用来重定义this这个对象
     * call 的参数是直接放进去的，第二第三第 n 个参数全都用逗号分隔
     * apply 的所有参数都必须放在一个数组里面传进去
     * bind 除了返回是函数以外，它的参数和 call 一样
     */
    paramater() {
        let l = {
            name: "xx",
            xx: "xxxxxxxxxxxxx "
        };
        var name = "xx";
        let x = {
            step: function (nme, qw) {
                return this.name + " : " + this.xx + "nme: " + nme + " qw " + qw;
            }
        };
        // let info=x.step.call(l,"x","d");
        // let info=x.step.apply(l,["x","d"]);
        let info = x.step.bind(l, "x", "d")();
        console.log("info " + info + " cc");

    }

    /**
     * 确认末尾字符算法
     */
    confirmEnding(str, target) {

        let l=target.length;
        let s=str.substring(str.length-l,str.length);
        return (target==s)?true:false;




    }

    /**
     * 寻找数组中的最大值算法挑战
     */
    largestOfFour(arr){


    }

    /**
     * 设置首字母大写挑战算法
     */
    titleCase(str) {
        str = str.split(" ");
        for (let i in str) {
            let arr = str[i].split("");
            for (let k = 0; k < arr.length;k++) {
                arr[k]=arr[k].toLowerCase();
            }
            arr[0] = arr[0].toUpperCase();
            arr = arr.join("");
            str[i] = arr;
        }
        str = str.join(" ");
        return str;
    }


    /**
     * 寻找最长的单词算法
     */
    findLongestWord(str) {
        str = str.split(" ");
        let s = "";
        for (let i in str) {
            s = ((str[i].length > s.length) ? str[i] : s);
        }
        return s.length;
    }

    /**
     * 回文算法
     * palindrome(回文)是指一个字符串忽略标点符号、大小写和空格，正着读和反着读一模一样。
     */
    palindrome(str) {
        let biaodian = /[\s|\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?|\、|\，|\；|\。|\？|\！|\“|\”|\‘|\’|\：|\（|\）|\─|\…|\—|\·|\《|\》]/g;
        str = str.replace(biaodian, "");
        console.log("xxx " + str);
        str = str.toLowerCase();//tolowerCase 将字符串值转换为小写字母
        console.log(str);
        let z = str;
        let f = str.split("");
        f = f.reverse();
        f = f.join("");
        console.log(f);
        return ((f === z) ? true : false);

    }

    /**
     * 阶乘算法 5！
     * @param num
     * @returns {*}
     */
    factorialize(num) {
        let x = 1;
        for (let i = 1; i <= parseInt(num); i++) {
            x = x * i;
        }
        return x;
    }


    /**
     * 反转字符串的相关算法
     * @param str
     * @returns {string | *}
     */
    reverseString(str) {
        str = new String(str);//将数据类型转换为字符串类型
        str = str.split('');//拆分字符串为有序表，返回阵列 （对象，并非数组）
        console.log(typeof  str);
        str = str.reverse();//将阵列进行反转 阵列最后一个元素变成第一个元素
        str = str.join("");//将阵列中的元素串联在一起
        console.log(str);
        return str;
    }


}
